题目地址 (opens new window)

  • 😭 第一次刷题 2020年3月10日

# 递归写法📓

WARNING

**时间复杂度:**O(N),其中 N 指的是链表的节点数量

**空间复杂度:**O(N),递归过程使用的堆栈空间

有点深奥,在思考的时候,可以考虑两个节点的情况👨🏻‍💻

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function(head) {
  // 递归写法
  if (head == null || head.next == null) {
    return head;
  }

  let firstNode = head;
  let secondNode = head.next;

  firstNode.next = swapPairs(secondNode.next);
  secondNode.next = firstNode;

  return secondNode;
};

# 迭代写法 😎

WARNING

以前用 Java 做出来,但是现在又忘记了,还需要反复练习才行😬

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function(head) {
  // 迭代写法
  let dummyHead = new ListNode(-1);
  dummyHead.next = head;

  let cur = dummyHead;
  while (cur.next != null && cur.next.next != null) {
    let first = cur.next;
    let end = cur.next.next;

    cur.next = end;
    first.next = end.next;
    end.next = first;

    cur = first;
  }
  return dummyHead.next;
};
最后编辑时间: 3/10/2020, 8:23:38 PM